package study.core.rdd.operator

import org.apache.spark.{SparkConf, SparkContext}

/**
 * 转换算子之键值操作join操作
 * join操作与数据库中的join操作(内连接)相似，根据key来进行关联操作，会每条数据依次进行匹配，可能会造成数据的笛卡尔积乘积，数据的几何式增长，同样的还有leftOuterJoin左外连接和rightOuterJoin右外连接
 *
 * @author zh
 * @date 2021/5/15 10:47
 */
object TestJoin {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("rddMap")
    val context = new SparkContext(sparkConf)

    // 准备集合
    val list = List(("a", 1), ("b", 2), ("a", 3), ("b", 4), ("a", 5))
    val list1 = List(("a", 6), ("b", 5), ("a", 4), ("b", 3), ("a", 2))
    // 创建RDD
    val rdd = context.makeRDD(list, 2)
    val rdd1 = context.makeRDD(list1, 2)

    val result = rdd.join(rdd1)

    result.collect().foreach(println)

    context.stop()

    //(b,(2,5))
    //(b,(2,3))
    //(b,(4,5))
    //(b,(4,3))
    //(a,(1,6))
    //(a,(1,4))
    //(a,(1,2))
    //(a,(3,6))
    //(a,(3,4))
    //(a,(3,2))
    //(a,(5,6))
    //(a,(5,4))
    //(a,(5,2))

  }

}
